package com.example.logistics_manage.service;

import com.example.logistics_manage.pojo.User;
import com.example.logistics_manage.pojo.dto.UserDto;
import com.example.logistics_manage.pojo.dto.UserRoleDto;
import com.example.logistics_manage.result.restful.R;

import java.io.InputStream;
import java.util.List;

public interface IUserService {
    /**
     * 登录验证生成token
     * @param user 用户账号密码
     * @return 用户信息
     */
    R<UserDto> login(User user);

    /**
     * 用户注册
     * @param user 用户信息
     * @return 提示信息
     */
    R<User> register(User user);

    /**
     * 获取验证码
     * @param phone 1
     */
    void sendCheckCode(String phone,String checkCode);
    User findByPhone(Long phone);
    void updateCodeByPhone(Integer code,Long phone);

    /**
     * 验证码登录
     * @param code 验证码
     * @param phone 电话
     * @return 0
     */
    R<UserDto> loginByCode(Integer code,Long phone);

    /**
     * 图片上传阿里云
     * @param inputStream 源文件的流
     * @param yunFileName 上传云端的文件名
     * @param originalFileName 源文件的名字
     * @return 云端路径
     */
    String upload(InputStream inputStream,String yunFileName, String originalFileName);

    /**
     * 更新用户头像
     * @param phone 电话
     * @param image 图片路径
     * @return 返回值
     */
    R<User> updateImageByPhone(Long phone, String image);

    /**
     * 更新用户名密码
     * @param user 用户
     * @return 1
     */
    int updateUser(User user);

    /**
     * 查找司机
     * @return 司机
     */
    List<User> selectByJobId();

    /**
     * 系统管理 查找所有员工
     * @return list
     */
    List<UserRoleDto> selectAllEmp();

    /**
     * 根据id更新用户职位
     * @return 1
     */
    int updateRole(User user);

    /**
     * 条件查询员工
     * @param user 员工
     * @return 所有
     */
    List<User> selectEmp(User user);

    /**
     * 查询管理员
     * @return list
     */
    List<User> selectAdmin();

    /**
     * 删除管理员
     * @param id id
     */
    void deleteAdmin(Integer id);

    /**
     * 条件查询admin
     * @param user 条件
     * @return list
     */
    List<User> selectAdminBy(User user);

    List<User> selectDriver();

    List<User> selectDriverBy(User user);

    List<User> selectCustomer();

    List<User> selectCustomerBy(User user);
}
